 $(function () {
   // setInterval(function(){
   //   $(".mui-numbox-btn-plus").trigger("tap");
   //   },50)
   //  var obj = {
   //    name: "大红",
   //    weight: 200,
   //    height: 140
   //  }
   //  for (var key in obj) {
   //    // key 属性名
   //    console.log(key, obj[key]);
   //    // 属性值

   //  }
   /* 
   对象：
   1 对象可以通过 for in 循环 循环里面 有两个参数 key-val  属性名-属性值
   2 访问对象的方式 2种
     obj.name = 
     obj["name"]=
    */

   /* 
   1 权限控制 
      未登录 
        1 不能查看当前的页面
        2 顺便跳转到登录页面
          登录成功 要重新跳回来 
            设置 来源页面  会话存储中 设置key pageurl:当前的路径
       登录过了 正常的显示页面
  2 动态渲染
    1 发送请求获取数据
    2 渲染标签
  3 实现计算总价格的功能
    1 计算每一类的商品的单价 * 购买的数量（获取数字输入框值） 循环叠加。。
  4 点击 编辑|完成 按钮 的切换显示页面的某些标签
    1 删除按钮 复选框  数字输入框 
    2 body上有个edit_status 显示标签 没有则隐藏
  5 编辑同步购物车功能（发送请求到后台）
    1 点击按钮 判断 有没有商品需要同步  只需要判断有没有li标签的长度 
      1 用户都没有选购过商品 不需要做同步 给出用户提示 
      2 用户买过商品 
    2 构造参数 用于同步数据  var parmas={ infos:查询购物车成功之后的属性cart_info-也是json字符串 }
      我们需要把cart_info 按照原来的格式 返回到后台 但是 改变一个属性=购买的数量 
  6 点击删除按钮
    
    1 判断用户有麽易选择需要删除的li标签 长度判断
      length=0 用户 还么有选择需要删除的商品 给出提示 
      length!=0 再思考 构造参数
        1 弹出确认框 让用户确认是否要删除 。。。
    2 确认要删除  再思考 构造参数  删除和编辑是公用一个 接口 同步接口 
      var arr=[{name:苹果,num:1}，{name:西瓜,num:2},{name:香蕉,num:3}]
        编辑-同步的时候 
            [{name:苹果,num:11}，{name:西瓜,num:22},{name:香蕉,num:33}]
        删除-同步 要删除 苹果 同时 修改西瓜的数量 -> 100
           [{name:西瓜,num:100},{name:香蕉,num:33}]


   
    */
   init();

   function init() {
     // 判断有没有登录？？ 看本地存储中有没有 字段 userinfo  
     var userinfoStr = sessionStorage.getItem("userinfo");
     if (!userinfoStr) {
       // 不存在
       // 设置来源页面 方便 登录重新跳回来
       sessionStorage.setItem("pageurl", location.href);

       // 跳转登录页面 不要加延迟
       location.href = "login.html";
       // 因为页面的加载顺序 先  css -> html -> js 此时肯定是可以看到标签
       // 解决1 ： 把权限控制的放入到 head标签中执行 
       // 解决2 ： 在样式中隐藏 body标签 已经登录成功了  $(body).show();

     } else {
       // 存在
       $("body").show();
       getCartAll();
       eventList();
     }

   }

   /**
    * 绑定事件
    */
   function eventList() {
     //  点击加减号事件
     $(".order_wrap").on("tap", ".mui-numbox button", function () {
       // 重新计算总价格
       countAll();

     })

     // 点击编辑按钮
     $(".edit_btn").on("tap", function () {

       // 切换显示 body上 edit_status
       $("body").toggleClass("edit_status");

       // 判断body有 没有 edit_status  有 文字= 完成   没有 文字=    编辑
       if ($("body").hasClass("edit_status")) {
         $(".edit_btn").text("完成");
       } else {
         $(".edit_btn").text("编辑");
         //  开始同步的逻辑
         // 1 对li标签的长度做判断  不等于0  需要构造参数发送请求 长度=0 给出提示就ok
         var $lis = $(".order_wrap li");
         if ($lis.length == 0) {
           // 给出提示
           mui.toast("您还么有选购商品")
         } else {
           // 构造参数 实现编辑同步
           // console.log("构造参数");

           //  开始同步
           asyncCart($lis);

         }

       }

     })

     //  点击删除
     $(".delete_btn").on("tap", function () {
       // console.log("狗丢了怎么办？？？？    用搜狗搜索！！！  ");

       // 1 获取已经被勾选过的li标签的长度 
       var $lis = $(".order_wrap li .inp_chk:checked").parents("li");
       // console.log($lis);
       if ($lis.length == 0) {
         // 没选过
         mui.toast("还没有选中删除删除的商品");
       } else {
         // 准备删除
         // console.log("准备删除");

         // 弹出确认框 mui
         mui.confirm("您确定要删除吗", "警告", ["删除", "取消"], function (eType) {
           if (eType.index == 0) {
             // 删除
             // console.log("删除");

             // 构造删除-同步的参数
             // 1 哪个商品要删除 不需要做凭借 
             // 2 其他未被删除的商品 需要改变购买的数量 amount = li标签的input的标签的值 

             // 1 获取未被选中的li标签。。 （获取过被勾选的li标签 ）
             // var $unLis=$(".order_wrap li .inp_chk:checked").parents("li");
             var $unLis = $(".order_wrap li .inp_chk").not(":checked").parents("li");

             // 开始同步
             asyncCart($unLis);

           } else if (eType.index == 1) {
             // 取消
             console.log("取消");

           }

         })
       }

     })

     //  生成订单
     $(".order_create_btn").on("tap", function () {
       // console.log("救人英雄 喜欢穿紧身衣   救人要紧");
       /* 
       1 判断有没有商品 = li长度
         没有商品 长度=0 给出提示
         有商品
          构造参数 发送请求
       2 发送请求成功了
         1 给出提示  生成成功
         2 等待一小会 再去跳转页面 新的页面 order.html

        */

       // 1 获取li标签的长度
       var $lis = $(".order_wrap li");
       if ($lis.length == 0) {
         // 给出提示 
         mui.toast("你还没有选择商品");
       } else {
         // 开始拼接参数
         ordersCreate();

       }

     })
   }

   /**
    * 查询购物车信息
    */
   function getCartAll() {
     var userinfoStr = sessionStorage.getItem("userinfo");
     var token = JSON.parse(userinfoStr).token;

     $.get("my/cart/all", function (result) {
       //  console.log(result);
       if (result.meta.status == 200) {
         //  成功
         var cart_info_str = result.data.cart_info;
         //  已经购买过商品
         if (cart_info_str) {
           // 要循环的数据
           var cart_info = JSON.parse(cart_info_str);

           var html = template("mainTpl", {
             obj: cart_info
           });
           // console.log(html);
           $(".order_wrap").html(html);

           // 初始化数字输入框
           mui(".mui-numbox").numbox();

           //  计算总价格
           countAll();
         }

       } else {
         //  失败
       }
     })
     //  $.ajax({
     //    url: "my/cart/all",
     //   //  headers: {
     //   //    Authorization: token
     //   //  },
     //    success: function (result) {
     //      //  console.log(result);
     //      if (result.meta.status == 200) {
     //        //  成功
     //        var cart_info_str = result.data.cart_info;
     //        //  已经购买过商品
     //        if (cart_info_str) {
     //          // 要循环的数据
     //          var cart_info = JSON.parse(cart_info_str);

     //          var html = template("mainTpl", {
     //            obj: cart_info
     //          });
     //          // console.log(html);
     //          $(".order_wrap").html(html);

     //          // 初始化数字输入框
     //          mui(".mui-numbox").numbox();

     //          //  计算总价格
     //          countAll();
     //        }

     //      } else {
     //        //  失败
     //      }


     //    }
     //  })

   }

   /**
    * 同步购物车接口
    * @param {Array} $lis 需要同步的li标签的数组
    */
   function asyncCart($lis) {
     //  需要同步的参数
     var infos = {};
     // 获取li标签身上data-obj 
     for (var i = 0; i < $lis.length; i++) {
       var li = $lis[i];
       // 获取li标签身上商品对象
       var goodsObj = $(li).data("obj");

       // 修改购买的数量
       goodsObj.amount = $(li).find(".amount_new").val();
       //  给infos赋值
       infos[goodsObj.goods_id] = goodsObj;
     }
     //  console.log(infos);

     // 发送请求
     $.post("my/cart/sync", {
       infos: JSON.stringify(infos)
     }, function (result) {
       if (result.meta.status == 200) {
         // 成功
         mui.toast("同步成功");
         // 刷新数据 不是指刷新页面 而时重新发送请求获取新的数据 重新渲染
         getCartAll();
       } else {
         // 同步失败
         console.log("同步失败");
       }

     })
   }

   /**
    * 计算总价格
    */
   function countAll() {
     /* 
     1 获取所有的li标签的商品信息
     2 循环
       获取 单价 * 数量 数字输入框里面的值
     3 叠加计算总和 
     4 把总价格设置到 总价标签上！！
      */

     // 把每一类的商品 都 挂到 对应的li标签身上 data-obj 方式挂
     // 获取所有的li标签 加上一个$前缀来表示 该变量是一个jq对象而不是 js对象
     var $lis = $(".order_wrap li");
     //  总价
     var total_price = 0;
     for (var i = 0; i < $lis.length; i++) {
       // li 是一个js的dom对象
       var li = $lis[i];
       //  获取 li标签身上的商品信息
       // 2种方式 js jq 
       // js
       // var obj0=li.dataset.obj;
       // console.log(obj0);
       // jq  帮你把json字符串 转成了对象 
       var obj1 = $(li).data("obj");
       // console.log(obj1);
       // 单价
       var tmp_price = obj1.goods_price;
       // 购买的数量 
       var tmp_amount = $(li).find(".amount_new").val();

       total_price += tmp_price * tmp_amount;
     }

     //  给总价标签赋值
     $(".total_price").text(total_price);

   }

   /**
    * 生成订单
    */
   function ordersCreate() {
    //  {
    //    "order_price": 5, 购物车里面总价格
    //    "consignee_addr": "地址", 随写
    //    "goods": [
      // { 
    //      "goods_id": 5, 商品的id
    //      "goods_number": 3, 购买的数量 不是库存
        //  "goods_price": 15 单价
    //    }
  // ]
    //  }

    var $lis = $(".order_wrap li");
    // 需要生成订单的参数对象
    var orderObj={
      order_price:$(".total_price").text(),
      consignee_addr:"召唤师峡谷",
      goods:[]
    };

    for (var i = 0; i < $lis.length; i++) {
      var li = $lis[i];
      // 获取li标签身上的商品对象
      var goods_obj=$(li).data("obj");
      orderObj.goods.push({
        goods_id:goods_obj.goods_id,
        goods_number:$(li).find(".amount_new").val(),
        goods_price:goods_obj.goods_price
      });
    }

    $.post("my/orders/create",orderObj,function (result) {
      if(result.meta.status==200){
        // 成功
        mui.toast("生成订单成功");
        setTimeout(function () {
          location.href="order.html";
        },1000);
      }else{
        // 失败
      }
      
    })


   }

 })